package control

import (
	"context"
	"errors"
	"fmt"
	"github.com/gin-gonic/gin"
	"gorm.io/gorm"
	"gorm/model"
	"gorm/utility"
	"net/http"
)

func Register(c *gin.Context) {
	phone := c.PostForm("phone")
	passWord := c.PostForm("passWord")
	if phone == "" {
		c.JSON(http.StatusOK, gin.H{
			"code": "-1",
			"msg":  "账号不能为空",
		})
		return
	}
	if passWord == "" {
		c.JSON(http.StatusOK, gin.H{
			"code": "-1",
			"msg":  "密码不能为空",
		})
		return
	}

	user, err := model.ValidateUser(phone)
	if err != nil && !errors.Is(err, gorm.ErrRecordNotFound) {
		c.JSON(http.StatusOK, gin.H{
			"code": "-1",
			"msg":  err.Error(),
		})
		return
	}
	if user.ID > 0 {
		c.JSON(http.StatusOK, gin.H{
			"code": "-1",
			"msg":  "账号已存在",
		})
		return
	}

	user.Phone = phone
	user.Password = passWord

	err = model.CreateUser(user)
	if err != nil {
		c.JSON(http.StatusOK, gin.H{
			"code": "-1",
			"msg":  err.Error(),
		})
		return
	}

	c.JSON(http.StatusOK, gin.H{
		"code": "0",
		"msg":  "注册成功",
	})
	return
}

func Login(c *gin.Context) {
	phone := c.PostForm("phone")
	passWord := c.PostForm("passWord")
	if phone == "" {
		c.JSON(http.StatusOK, gin.H{
			"code": "-1",
			"msg":  "账号不能为空",
		})
		return
	}
	if passWord == "" {
		c.JSON(http.StatusOK, gin.H{
			"code": "-1",
			"msg":  "密码不能为空",
		})
		return
	}

	user, err := model.Login(phone, passWord)
	if err != nil || gorm.ErrRecordNotFound == err {
		c.JSON(http.StatusOK, gin.H{
			"code": "-1",
			"msg":  "请先注册在登陆",
		})
		return
	}
	token, err := utility.GenToken(user.Phone, user.Password, user.ID)
	if err != nil {
		c.JSON(http.StatusOK, gin.H{
			"code": "-1",
			"msg":  err.Error(),
		})
		return
	}
	updataToken, err := model.UpdataToken(user.ID, token)
	if err != nil {
		c.JSON(http.StatusOK, gin.H{
			"code": "-1",
			"msg":  err.Error(),
		})
		return
	}
	c.JSON(http.StatusOK, gin.H{
		"code": "-1",
		"data": updataToken.Token,
		"msg":  "登录成功",
	})
	return
}

func testFunPost(c *gin.Context) {
	keyValueMap := map[string]interface{}{
		"username": "JohnDoe",
		"email":    "john@example.com",
		"age":      "30",
	}

	err := model.Rdb.HMSet(context.Background(), "user:1", keyValueMap).Err()
	if err != nil {
		fmt.Println("设置key出错：", err)
		return
	}
	c.JSON(http.StatusOK, gin.H{
		"code": 0,
		"data": "成功",
	})
}

func testFunGet(c *gin.Context) {
	result, err := model.Rdb.HGetAll(context.Background(), "user:1").Result()

	if err != nil {
		fmt.Println("设置key出错：", err)
		return
	}
	c.JSON(http.StatusOK, gin.H{
		"code": 0,
		"data": result,
	})
}
